package com.foreknow.controller;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Cookie的原理
 *     1.要在服务器端创建cookie对象并将数据存储到Cookie中，Cookie cookie = new Cookie("name","tom");
 *     2.服务器会发送Cookie的信息给浏览器，之后就会将Cookie存储到浏览器端
 *     3.浏览器会在下次访问服务器的时候会携带Cookie的信息
 *     4.浏览器会接收到浏览器携带的Cookie信息
 * 注意：cookie.setMaxAge(int exp)
 *     参数的值：
 *         1.正数：表示Cookie的数据会通过浏览器缓存到硬盘中，数值表示保存的时间
 *         2.负数：表示Cookie的数据会保存在浏览器的内存中，如果浏览器关闭，Cookie就失效了
 *         3.0：表示会删除同名的Cookie的数据
 *
 * Cookie的数据只能保存非中文字符串类，可以保存多个Cookie，通常来说一个浏览器可以保存300个Cookie，每个Cookie的大小限制为4KB
 *
 */

public class CookieDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 创建一个 Cookie 对象：您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数，cookie 名称和 cookie 值都是字符串。
        //Cookie cookie = new Cookie("name","tom");
        //2.设置最大生存周期：您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间（以秒为单位）。
        // 下面将设置一个最长有效期为 一个月 的 cookie。
        //cookie.setMaxAge(1*30*24*60*60);
        //3. 发送 Cookie 到 HTTP 响应头：您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie
        //resp.addCookie(cookie);

        //上面是发送Cookie信息，读取需要先注释
        //如何读取Cookie信息
        //1.要读取 Cookie，您需要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。
        //2.然后循环遍历数组，并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();
        if (cookies != null){
            for (Cookie c:cookies){
                String name = c.getName();
                String value = c.getValue();
                out.println(name+"-----"+value);
            }
        } else {
            out.println("no cookie");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}
